import axios, { AxiosRequestConfig, AxiosResponse } from 'axios';

/**
 * 根据运行环境获取基础请求URL
 */
export const getUrl = (): string => {
    const value: string = import.meta.env.VITE_API_URL as string;
    return value;
}

/**
 * 创建 Axios 实例并进行初始化
 */
const createAxios = (axiosConfig: AxiosRequestConfig): Promise<AxiosResponse<any>> => {
    const Axios = axios.create({
        baseURL: getUrl(), // 基础 URL
        timeout: 1000 * 10, // 请求超时
        headers: {
            'Content-Type': 'application/json', // 默认的请求头
        },
        responseType: 'json', // 响应格式
    });

    // 请求拦截器
    Axios.interceptors.request.use(
        (config) => {
            // 在请求前添加必要的配置，如 token
            const token = localStorage.getItem('token'); // 从本地存储获取 token
            if (token) {
                config.headers['Authorization'] = `Bearer ${token}`; // 自动附加 token
            }

            return config;
        },
        (error) => {
            // 请求错误时处理
            return Promise.reject(error);
        }
    );

    // 响应拦截器
    Axios.interceptors.response.use(
        (response) => {
            // 返回响应数据
            return response.data; // 简化，直接返回响应体数据
        },
        (error) => {
            // 响应错误时处理
            return Promise.reject(error); // 继续传递错误
        }
    );

    // 发起请求
    return Axios(axiosConfig);
}

export default createAxios;
